package session;

import entity.Category;
import entity.Item;
import java.util.List;
import javax.ejb.Remote;

/**
 * Rappresenta il gestore delle transazioni degli entity Item.
 *
 * @author Rachid Ouchary, Fabio Strocco, Max Passaghe, Marco Tansini.
 */
@Remote
public interface ItemFacadeRemote {

    /**
     * Rende persistente un nuovo Item.
     *
     * @param item l'item da rendere persistente.
     */
    public void create(Item item);

    /**
     * Aggiorna lo stato dell'item nel DB allo stato dell'item passato
     * come parametro.
     *
     * @param item l'item da aggiornare.
     */
    public void edit(Item item);

    /**
     * Rimuove un item dal DB.
     *
     * @param item l'item da rimuovere.
     */
    public void remove(Item item);

    /**
     * Carica l'item con l'id specificato.
     *
     * @param id l'id dell'item da caricare.
     * @return l'item con l'id specificato, <code>null</code> se non esiste nel
     * DB.
     */
    public Item find(Long id);

    /**
     * Cerca l'oggetto nel database con i valori degli attributi specificati
     * come parametri.
     * @param categoria la categoria dell'oggetto.
     * @param descrizione la descrizione dell'oggetto.
     * @return l'oggetto se un oggetto con categoria e descrizione specificate
     * esiste, <code>null</code> altrimenti.
     */
    public Item findBy(Category categoria, String descrizione);

    /**
     *
     * @return
     */
    public List<Item> findAll();

    /**
     *
     * @param range
     * @return
     */
    public List<Item> findRange(int[] range);

    /**
     *
     * @return
     */
    public int count();
}
